home *** CD-ROM | disk | FTP | other *** search
- 10 REM Program MAILMGR - Mailing List Manager
- 20 REM Written by Warren Cotton
- 30 REM Date Written 06/10/84
- 99 '
- 1010 SCREEN 0,0,0:CLEAR
- 1020 KEY OFF: DEFINT A-Z: CLS
- 1030 OPEN "SCRN:" FOR OUTPUT AS #2
- 1040 DIM R$(21,3),H$(7)
- 1050 H$(0)="REC #": Q$=CHR$(34)
- 1060 FOR J=1 TO 7: READ H$(J): NEXT
- 1070 DATA LAST NAME,FIRST NAME,COMPANY,STREET ADDR,CITY,STATE,ZIP CODE
- 1080 ON ERROR GOTO 1200: GOSUB 8000
- 1100 REM ===> LISTNAME File Routines
- 1110 CLS: PRINT "SELECT FROM:": PRINT
- 1120 FOR J=1 TO NR: PRINT J" "R$(J,0): NEXT: PRINT
- 1130 PRINT J" CREATE A NEW FILE"
- 1140 IF J>1 THEN PRINT J+1" DELETE A FILE":PRINT
- 1150 INPUT"NUMBER";D: IF D<1 OR D>J+1 THEN GOSUB 9200: GOTO 1150
- 1160 IF D<J THEN 1320
- 1170 ON D-NR GOTO 1220,1800
- 1200 RESUME 1210 'target of error
- 1210 ON ERROR GOTO 0
- 1220 IF J=0 THEN J=1
- 1230 PRINT: INPUT"NAME FOR NEW FILE: ",R$(D,0)
- 1240 IF LEN(R$(D,0))>8 THEN PRINT"MAX LENGTH 8 CHARACTERS": GOTO 1230
- 1250 FOR I=1 TO D-1: IF R$(I,0)<>R$(D,0) THEN NEXT: PRINT: GOTO 1280
- 1260 PRINT"FILE "Q$+R$(D,0)+Q$" ALREADY EXISTS.": GOTO 1230
- 1280 FOR I=1 TO 3: PRINT"ENTER DEFAULT "H$(I+4); TAB(24): INPUT R$(D,I): NEXT
- 1290 PRINT: PRINT"ACCESS DEFAULT BY ENTERING '*' IN FIELD": PRINT
- 1300 NR=D: GOSUB 8200
- 1320 PRINT: MEM#=FRE(0)
- 1330 PRINT "AVAILABLE BYTES OF MEMORY ="FRE(0)
- 1340 PRINT: AVGREC=60: B=INT(MEM#/AVGREC)-10
- 1350 PRINT"ASSUMING AN AVERAGE OF"AVGREC"CHARS/RECORD,"
- 1360 PRINT"MEMORY CAN HOLD"B"RECORDS."
- 1370 DIM N$(B,7),R(B): NR=0
- 1380 ON ERROR GOTO 1700
- 1400 OPEN R$(D,0)+".LST" FOR INPUT AS #1
- 1410 ON ERROR GOTO 0
- 1420 PRINT: PRINT"LOADING FILE "R$(D,0)
- 1430 INPUT #1,NR: FOR J=1 TO NR: FOR I=1 TO 7
- 1440 LINE INPUT#1,N$(J,I)
- 1450 NEXT I,J: CLOSE #1: GOTO 2000
- 1700 REM ===> No maillist file
- 1710 RESUME 1720 'target of error
- 1720 ON ERROR GOTO 0
- 1730 PRINT: PRINT"FILE "Q$+R$(D,0)+Q$" ESTABLISHED"
- 1740 PRINT: INPUT"READY TO ENTER RECORDS";S$
- 1750 IF S$="Y" OR S$="y" THEN 6200 ELSE 2000
- 1800 REM ===> Delete a Data Base
- 1810 PRINT: INPUT"FILE # TO DELETE";D
- 1820 IF D<1 OR D>J-1 THEN GOSUB 9200: GOTO 1810
- 1830 CLS: LOCATE 9,1
- 1840 PRINT"READY TO DELETE "Q$+R$(D,0)+Q$".": PRINT
- 1850 PRINT"ONCE DELETED, THIS DATA CANNOT BE RECOVERED."
- 1860 INPUT"ARE YOU SURE YOU WANT TO DELETE IT (Y/N)";S$
- 1870 IF S$<>"Y" AND S$<>"y" THEN 1100
- 1940 FL$=R$(D,0): FE$=".LST": GOSUB 8300
- 1960 GOSUB 8000: IF NR=1 THEN FL$="LISTNAME": FE$="": GOSUB 8300: GOTO 9400
- 1970 FOR J=D TO NR-1: FOR I=0 TO 3: R$(J,I)=R$(J+1,I): NEXT I,J: NR=NR-1
- 1980 PRINT: PRINT"DELETION COMPLETED": GOSUB 8200: GOTO 1100
- 2000 REM ===> Main Menu
- 2010 CLS: PRINT"*** MAILING LIST MANAGER ***": PRINT
- 2020 PRINT"CURRENT FILE: "R$(D,0)
- 2030 PRINT"CURRENT RECORD COUNT:"NR: PRINT
- 2040 PRINT" 1 SELECT NEW FILE"
- 2050 PRINT" 2 SEARCH DATA"
- 2060 PRINT" 3 REPORTS"
- 2070 PRINT" 4 SORT FILE"
- 2080 PRINT" 5 ADD/CHANGE/DELETE RECORDS"
- 2090 PRINT" 6 QUIT": PRINT: CD=0
- 2100 INPUT"NUMBER";S: IF S<1 OR S>6 THEN GOSUB 9200: GOTO 2100
- 2110 ON S GOTO 9400,2400,3000,5000,6000,9500
- 2400 REM ===> Search Data
- 2410 L=0
- 2420 CLS: PRINT"SEARCH ANY OF THE FOLLOWING FIELDS:": PRINT: GOSUB 7700
- 2430 INPUT"NUMBER";S: IF S<0 OR S>7 THEN GOSUB 9200: GOTO 2430
- 2440 PRINT: PRINT"ENTER THE ";H$(S);: INPUT" TO BE FOUND: ",S$
- 2450 GOSUB 2700: IF PF THEN PRINT"SEARCHING..." ELSE CLS
- 2460 IF S=0 THEN J=VAL(S$): GOSUB 2800: GOTO 2500
- 2470 FOR J=1 TO NR: N$(J,0)=STR$(J)
- 2480 I=INSTR(N$(J,S),S$): IF I>0 THEN GOSUB 2800
- 2490 NEXT J: IF PF THEN LPRINT CHR$(12);
- 2500 INPUT"SEARCH FINISHED -- MORE SEARCHES (Y/N)";L$
- 2510 IF L$="Y" OR L$="y" THEN 2420 ELSE 2000
- 2600 REM ===> List All Records
- 2610 IF PF THEN PRINT"PRINTING..." ELSE CLS
- 2620 FOR J=1 TO NR: GOSUB 2800: NEXT
- 2630 IF PF THEN LPRINT CHR$(12);
- 2640 INPUT"END OF LIST -RETURN- FOR MENU",L$: GOTO 2000
- 2700 REM ===> Printer selection
- 2710 CLOSE #2: PRINT: INPUT"OUTPUT TO PRINTER (Y/N)";L$
- 2720 IF L$="Y" OR L$="y" THEN OPEN "LPT1:" FOR OUTPUT AS #2: LM=60: PF=1 ELSE OPEN "SCRN:" FOR OUTPUT AS #2: LM=20: PF=0
- 2730 L=0: RETURN
- 2800 REM ===> Print a Record
- 2810 PRINT #2,H$(0)": ";J
- 2820 FOR I=1 TO 7: PRINT #2,I" "H$(I)":"; TAB(18) N$(J,I): NEXT
- 2830 PRINT #2,: L=L+9: IF L+7<LM THEN 2890
- 2840 IF PF THEN LPRINT CHR$(12);
- 2850 PRINT "-RETURN- TO CONTINUE; -ESC- FOR MAIN MENU";
- 2860 L$=INKEY$: IF L$="" THEN 2860
- 2870 IF L$=CHR$(27) THEN 2000 ELSE IF L$<>CHR$(13) THEN 2860
- 2880 L=0: IF PF THEN PRINT: PRINT"PRINTING..." ELSE CLS
- 2890 RETURN
- 3000 REM ===> Reports
- 3010 CLS: PRINT"SELECT FROM:": PRINT
- 3020 PRINT" 0 RETURN TO MAIN MENU"
- 3030 PRINT" 1 LIST ALL RECORDS W/ HEADERS"
- 3040 PRINT" 2 FILE LISTING, 2-UP"
- 3050 PRINT" 3 MAILING LABELS": PRINT
- 3060 INPUT"NUMBER";S: IF S<0 OR S>3 THEN GOSUB 9200: GOTO 3060
- 3070 IF S>0 THEN GOSUB 2700
- 3080 ON S GOTO 2600,3200,3100: GOTO 2000
- 3100 REM Mailing Labels
- 3110 PRINT: INPUT"HOW MANY LINES BETWEEN LABELS";E
- 3115 IF PF THEN PRINT"PRINTING..."
- 3120 FOR J=1 TO NR
- 3130 IF N$(J,2)="" THEN PRINT #2,N$(J,1) ELSE PRINT #2,N$(J,2)+" "+N$(J,1)
- 3140 IF N$(J,3)="" THEN L=3 ELSE PRINT #2,N$(J,3): L=4
- 3150 PRINT #2,N$(J,4)
- 3160 PRINT #2,N$(J,5)+", "+N$(J,6)+" "+N$(J,7)
- 3170 FOR I=L TO 4+E: PRINT #2,: NEXT I
- 3180 NEXT J: GOTO 2000
- 3200 REM 2-up file listing
- 3210 I=(LM\5): J=1
- 3220 IF PF THEN PRINT"PRINTING..." ELSE CLS
- 3230 MR=J+I: WHILE J<MR
- 3240 K=J+I
- 3250 PRINT #2,N$(J,2)+" "+N$(J,1) TAB(35) N$(K,2)+" "+N$(K,1)
- 3260 IF N$(J,3)="" AND N$(K,3)="" THEN N=3 ELSE N=4: PRINT #2,N$(J,3) TAB(35) N$(K,3)
- 3270 PRINT #2,N$(J,4) TAB(35) N$(K,4)
- 3280 PRINT #2,N$(J,5)+", "+N$(J,6)+" "+N$(J,7) TAB(35) N$(K,5)+", "+N$(K,6)+" "+N$(K,7)
- 3290 PRINT #2,: IF N=3 THEN PRINT #2,
- 3300 J=J+1: WEND
- 3310 IF J+I<NR THEN GOSUB 2840: J=MR+I: GOTO 3230
- 3320 IF PF THEN LPRINT CHR$(12);
- 3330 INPUT"END OF REPORT -RETURN- FOR MENU",L$: GOTO 2000
- 5000 REM ===> Sort Data Base
- 5010 CLS: MF=1: GOSUB 7700
- 5020 INPUT"SORT ON WHICH FIELD #";S: IF S<1 OR S>7 THEN GOSUB 9200: GOTO 5020
- 5060 PRINT: PRINT "SORTING ..."
- 5070 FOR I=1 TO NR: R(I)=0: NEXT
- 5080 FOR I=1 TO NR: FOR J=1 TO NR
- 5090 IF S=7 THEN 5120
- 5100 IF N$(I,S)>=N$(J,S) THEN R(I)=R(I)+1
- 5110 GOTO 5130
- 5120 IF VAL(N$(I,7))>=VAL(N$(J,7)) THEN R(I)=R(I)+1
- 5130 NEXT J,I
- 5140 PRINT "SORT PHASE 1 FINISHED"
- 5150 FOR I=NR TO 1 STEP -1:FOR J=NR TO 1 STEP -1
- 5160 IF I<>J THEN IF R(I)=R(J) THEN R(J)=R(J)-1
- 5170 NEXT J,I
- 5180 PRINT"SORT PHASE 2 FINISHED": J=1
- 5190 IF R(J)=J THEN J=J+1:GOTO 5190
- 5200 IF J>=NR THEN 5230
- 5210 FOR I=1 TO 7: SWAP N$(R(J),I),N$(J,I): NEXT
- 5220 SWAP R(R(J)),R(J): GOTO 5190
- 5230 BEEP: PRINT"SAVE THE ";R$(D,0);" FILE SORTED BY ";H$(S);: INPUT L$
- 5240 IF L$="Y" OR L$="y" THEN GOSUB 8100
- 5250 GOTO 2000
- 6000 REM ===> File modification sub-menu
- 6010 CLS: PRINT"*** ADD/CHANGE/DELETE RECORDS ***": PRINT
- 6020 PRINT"CURRENT FILE: "R$(D,0)
- 6030 PRINT"CURRENT RECORD COUNT:"NR
- 6040 PRINT"ROOM FOR"B-NR"MORE RECORDS": PRINT
- 6050 PRINT" 0 RETURN TO MAIN MENU"
- 6060 PRINT" 1 ENTER RECORDS"
- 6070 PRINT" 2 CHANGE DATA"
- 6080 PRINT" 3 DELETE RECORDS": PRINT
- 6100 INPUT"NUMBER";S: IF S<0 OR S>3 THEN GOSUB 9200: GOTO 6100
- 6110 ON S GOTO 6200,6400,6600: GOTO 6900
- 6200 REM ===> Enter Records
- 6210 CLS
- 6220 PRINT"NULL LAST NAME WILL END ENTRY": PRINT
- 6230 NR=NR+1: PRINT"ENTERING RECORD #"NR: PRINT
- 6240 FOR I=1 TO 7: PRINT H$(I)":"; TAB(14)
- 6250 LINE INPUT I$
- 6260 IF I=1 AND I$="" THEN NR=NR-1: GOTO 6000
- 6270 IF I>4 AND I$="*" THEN N$(NR,I)=R$(D,I-4) ELSE N$(NR,I)=I$
- 6280 NEXT I: PRINT: CD=1: GOTO 6220
- 6400 REM ===> Change Data
- 6410 PRINT: INPUT"REC # TO BE CHANGED";J
- 6420 CLS: PRINT H$(0);": ";J
- 6430 FOR I=1 TO 7: PRINT I" "H$(I)":" TAB(18) N$(J,I): NEXT: PRINT
- 6440 INPUT"FIELD # TO BE CHANGED (0 FOR NO CHANGE)";S
- 6450 IF S<1 THEN 6500 ELSE IF S>7 THEN GOSUB 9200: GOTO 6440
- 6460 PRINT: PRINT"FROM "H$(S)": "N$(J,S)
- 6470 PRINT" TO "H$(S)": ";
- 6480 LINE INPUT I$: PRINT: CD=1
- 6490 IF S>4 AND I$="*" THEN N$(J,S)=R$(D,S-4) ELSE N$(J,S)=I$
- 6500 PRINT"(-ESC- TO END CHANGES, -RETURN- FOR NEXT HIGHER REC #)"
- 6510 PRINT"NEXT REC # TO CHANGE? ";: LOCATE ,,1: A$=""
- 6520 L$=INKEY$: IF L$="" THEN 6520
- 6530 IF L$=CHR$(27) THEN 6000
- 6540 IF L$=CHR$(13) THEN IF LEN(A$)=0 THEN J=J+1: GOTO 6420 ELSE J=VAL(A$): GOTO 6420
- 6550 IF L$=CHR$(8) THEN LOCATE ,POS(0)-1: PRINT" ";: LOCATE ,POS(0)-1,1: IF LEN(A$)>0 THEN A$=LEFT$(A$,LEN(A$)-1): GOTO 6520 ELSE 6520
- 6560 IF ASC(L$)>=48 AND ASC(L$)<=57 THEN PRINT L$;: A$=A$+L$: ELSE BEEP
- 6570 GOTO 6520
- 6600 REM ===> Delete Records
- 6605 CLS
- 6610 INPUT"ENTER REC # TO DELETE (-RETURN- TO END DELETION): ",DR
- 6620 IF DR<1 THEN 6000 ELSE IF DR>NR THEN GOSUB 9200: GOTO 6610
- 6630 PRINT: PRINT H$(0);": ";DR
- 6640 FOR I=1 TO 7: PRINT I" "H$(I)":"; TAB(18) N$(DR,I): NEXT
- 6650 PRINT: INPUT"DELETE THIS RECORD (Y/N)";L$
- 6660 IF L$="Y" OR L$="y" THEN 6670 ELSE PRINT: GOTO 6610
- 6670 FOR J=DR TO NR-1: FOR I=1 TO 7
- 6680 N$(J,I)=N$(J+1,I): NEXT I,J: NR=NR-1: CD=1
- 6690 PRINT: PRINT">>> RECORD NUMBER"DR"DELETED <<<": PRINT: GOTO 6610
- 6900 REM ===> Return to Main Menu
- 6910 IF CD=1 THEN GOSUB 8100
- 6920 GOTO 2000
- 7700 REM ===> Sub-Menu of Field Headers
- 7710 PRINT "SELECT FROM:":PRINT
- 7720 IF MF=0 THEN PRINT MF;" ";H$(0)
- 7730 FOR I=1 TO 7: PRINT I;" ";H$(I): NEXT
- 7740 PRINT: MF=0: RETURN
- 8000 REM ===> Read Listname File
- 8020 OPEN "LISTNAME" FOR INPUT AS #1
- 8030 ON ERROR GOTO 0
- 8040 INPUT #1,NR
- 8050 FOR J=1 TO NR: FOR I=0 TO 3: INPUT #1,R$(J,I): NEXT I,J
- 8060 CLOSE #1: RETURN
- 8100 REM ===> Write Maillist File (.LST)
- 8110 OPEN R$(D,0)+".LST" FOR OUTPUT AS #1
- 8120 PRINT: PRINT"STORING FILE "R$(D,0)
- 8130 PRINT #1,NR
- 8140 FOR J=1 TO NR: FOR I=1 TO 7
- 8150 PRINT #1,N$(J,I)
- 8160 NEXT I,J: CLOSE #1: RETURN
- 8200 REM ===> Write Listname File
- 8220 OPEN "LISTNAME" FOR OUTPUT AS #1
- 8230 PRINT #1,NR
- 8240 FOR J=1 TO NR: FOR I=0 TO 3: PRINT #1,R$(J,I): NEXT I,J
- 8250 CLOSE #1: RETURN
- 8300 REM ===> Delete a File
- 8310 PRINT"FILE "FL$+FE$;
- 8320 ON ERROR GOTO 8340
- 8330 KILL FL$+FE$: PRINT" DELETED": GOTO 8350
- 8340 PRINT" NOT FOUND": RESUME 8350 'target of error
- 8350 ON ERROR GOTO 0: RETURN
- 9200 REM ===> Subroutine to erase a line
- 9210 RWLC=CSRLIN-1: LOCATE RWLC,1: PRINT SPC(50);
- 9220 LOCATE RWLC,1: BEEP: RETURN
- 9400 CLOSE: RUN
- 9500 END
- 9999 REM ===> Dummy line for RENUM
- OCATE RWLC,1: PRINT SPC(50);
- 9220 LOCATE RWLC,1: BEEP: RETURN
- 9400 CLOSE: RUN
- 95